package com.bjpowernode.javase.array;
/*
Array
    1、数组是引用数据类型，实际上算个容器
    2、数组中即可以存储基本数据类型，也可以存储引用数据类型
    3、数组当中如果存储的是java对象的话，实际上存储的是对象的"引用(内存地址)"，数组中不能直接存储java对象
    4、数组一旦创建，长度不可变
    5、所有数组对象都有length属性，用来获取数组中元素的个数
    6、java中的数组要求数组中的元素的类型统一
    7、数组在存储的时候，数组中的元素内存地址是连续的
    8、所有的数组都是拿数组的第一个元素的地址作为整个数组对象的内存地址
    9、数组中每一个元素都有下标，从0开始以1递增，数组的存取都用下标进行
    10、优点：
            第一，每一个元素的内存地址在空间储存上是连续的
            第二，每一个元素类型相同，所以占用空间大小一样
            第三，知道一个元素的内存地址，知道每一个元素的占用空间大小，又知道下标，所以通过一个数学表达式可以计算出某个下标上元素的内存地址，直接通过内存地址定位元素
        缺点：
            第一：为了保证数组中每个元素的内存地址连续，所以在数组上随机删除或者增加元素的时候，效率低，涉及到后面元素统一向前或向后移动
            第二：数组不能存储大数据量，因为很难在内存空间上找到一块特别大的连续的内存空间
    11、定义一维数组
        语法格式：
            int[] array1;
    12、初始化一维数组
        静态初始化：
            int[] array = {100, 200 , 300 ,400 ,500};
        动态初始化：
            int[] array = new int[5]; //5表示数组的元素个数，默认值0
    13、当一个方法的参数是一个数组的时候，需要提供一个数组给方法

 */
public class ArrayTest01 {
    public static void main(String[] args) {
        int[] a = {1 , 2 , 3 , 4 , 5 , 6};
        //存和改
        System.out.println(a[2]);
        a[3] = 10;
        System.out.println(a[3]);

        //一维数组遍历
        for (int i = 0 ; i < a.length ; i++){
            System.out.println(a[i]);
        }

        //System.out.println(a[8]);//ArrayIndexOutOfBoundsException,著名异常，数组下标越界异常
        int[] b = new int[5];
        Object[] obj = new Object[6];

        //静态调用
        int[] w= {4, 5 , 6};
        printArray(w);
        printArray(new int[]{1 , 2 , 3});
        String[] strings2 = {"文文文文","梦梦梦梦","甜甜甜甜"};
        printArray2(strings2);

        //动态调用
        String[] strings = new String[3];
        strings[0] = "甜宝";
        strings[1] = "强宝";
        strings[2] = "文宝";
        printArray2(strings);

    }

    public static void printArray(int[] array) {
        for (int i = 0 ; i < array.length ; i++){
            System.out.println(array[i]);
        }
    }

    public static void printArray2(String[] args) {
        for (int i = 0 ; i < args.length ; i++){
            System.out.println(args[i]);
        }
    }
}
